#include<stdio.h>
#define MaxTerm 100
#define ElemType int

typedef struct Triple
{
    int x,y;     //x是列  y是行
    ElemType e;
    int flag;
}Triple;

typedef struct 
{
    Triple data[MaxTerm];
    int row,col,num;  //row行 col列 num非零元素个数
}TSMatrix,*TSMatrixptr;

void AddMatrix(TSMatrix A,TSMatrix B,TSMatrix *C)
{
    int maxrow,maxcol,maxnum,temp,pos=0;
    if(A.row>B.row)  maxrow=A.row;
    else             maxrow=B.row;
    if(A.col>B.col)  maxcol=A.col;
    else             maxcol=B.col;
    C->row=maxrow;
    C->col=maxcol;
    for(int i=0;i<A.num;i++)
    {
        for(int j=0;j<B.num;j++)
        {
            if(B.data[j].x==A.data[i].x && B.data[j].y==A.data[i].y)
            {
                temp=A.data[i].e+B.data[j].e;
                if(temp!=0)
                {
                    C->data[pos].x=A.data[i].x;
                    C->data[pos].y=A.data[i].y;
                    C->data[pos].e=A.data[i].e+B.data[j].e;
                    pos++;
                    A.data[i].flag=1;
                    B.data[j].flag=1;
                    break;
                }
                else
                {
                    A.data[i].flag=1;
                    B.data[j].flag=1;
                    break;
                }
            }
        }
    }
    for(int i=0;i<A.num;i++)
    {
        if(A.data[i].flag==0)
        {
            C->data[pos].x=A.data[i].x;
            C->data[pos].y=A.data[i].y;
            C->data[pos].e=A.data[i].e;
            pos++;
        }
    }
    for(int i=0;i<B.num;i++)
    {
        if(B.data[i].flag==0)
        {
            C->data[pos].x=B.data[i].x;
            C->data[pos].y=B.data[i].y;
            C->data[pos].e=B.data[i].e;
            pos++;
        }
    }
    C->num=pos;
}

int main()
{
    TSMatrix A;
    printf("请输入非零元素的个数：");
    scanf("%d",&A.num);
    printf("请输入稀疏矩阵的行数：");
    scanf("%d",&A.row);
    printf("请输入稀疏矩阵的列数：");
    scanf("%d",&A.col);
    printf("请依次输入非零元素的行 列 值：\n");
    for(int i=0;i<A.num;i++)
    {
        scanf("%d %d %d",&A.data[i].y,&A.data[i].x,&A.data[i].e);
        A.data[i].flag=0;
    }

    TSMatrix B;
    printf("请输入非零元素的个数：");
    scanf("%d",&B.num);
    printf("请输入稀疏矩阵的行数：");
    scanf("%d",&B.row);
    printf("请输入稀疏矩阵的列数：");
    scanf("%d",&B.col);
    printf("请依次输入非零元素的行 列 值：\n");
    for(int i=0;i<B.num;i++)
    {
        scanf("%d %d %d",&B.data[i].y,&B.data[i].x,&B.data[i].e);
        B.data[i].flag=0;
    }

    TSMatrix C;
    AddMatrix(A,B,&C);
    printf("相加后三元组的长度：%d\n",C.num);
    printf("相加后稀疏矩阵的行数：%d\n",C.row);
    printf("相加后稀疏矩阵的列数：%d\n",C.col);
    printf("相加后三元组的数据 行 列 值：\n");
    for(int i=0;i<C.num;i++)
    {
        printf("%d %d %d\n",C.data[i].y,C.data[i].x,C.data[i].e);
    }
}